﻿/*
 * 
 *     686. 重复叠加字符串匹配
 给定两个字符串 a 和 b，寻找重复叠加字符串 a 的最小次数，使得字符串 b 成为叠加后的字符串 a 的子串，如果不存在则返回 -1。

注意：字符串 "abc" 重复叠加 0 次是 ""，重复叠加 1 次是 "abc"，重复叠加 2 次是 "abcabc"。

 

示例 1：

输入：a = "abcd", b = "cdabcdab"
输出：3
解释：a 重复叠加三遍后为 "abcdabcdabcd", 此时 b 是其子串。
示例 2：

输入：a = "a", b = "aa"
输出：2
示例 3：

输入：a = "a", b = "a"
输出：1
示例 4：

输入：a = "abc", b = "wxyz"
输出：-1
 

提示：

1 <= a.length <= 104
1 <= b.length <= 104
a 和 b 由小写英文字母组成
通过次数14,940提交次数42,672
在真实的面试中遇到过这道题？

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/repeated-string-match
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
namespace LeetCodeSolutionByCSharp._686._重复叠加字符串匹配
{
    public class Solution
    {
        /// <summary>
        /// 重复叠加字符串匹配
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        public int RepeatedStringMatch(string a, string b)
        {
            int num = 0;
            char[] chs = b.ToCharArray();
            for (int i = 0; i < chs.Length; i++)
            {
                if (!a.Contains(chs[i].ToString()))
                {
                    return -1;
                }
            }
            if (a.Contains(b))
            {
                return 1;
            }
            getStr(a, a, b, ref num);
            return num;

        }

        private void getStr(string strStart, string a, string b, ref int num)
        {
            num = num + 1;
            if (!strStart.Contains(b))
            {
                getStr(strStart + a, a, b, ref num);
            }
        }
    }
}
